package com.xutong.myfunction.Utils;

import android.os.Environment;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2016/12/26.
 */
public class FileUtils {

    public static String FILEPATH = "";


    /**
     * 判断SDCard是否可用
     *
     * @return
     */
    public static boolean isSDCardEnable()
    {
        FILEPATH = "MyCamera"+File.separator;
        return Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED);

    }

    /**
     * 获取SD卡路径
     *
     * @return
     */
    public static String getSDCardPath()
    {
        String filePath = Environment.getExternalStorageDirectory().getAbsolutePath()
                + File.separator+FILEPATH;
        File file = new File(filePath);
        if(!file.exists()){//判断文件夹是否存在
            file.mkdirs();//不存在 则创建
        }
        return filePath;
    }

    /**
     * 获取系统存储路径
     *
     * @return
     */
    public static String getRootDirectoryPath()
    {
        String filePath = Environment.getRootDirectory().getAbsolutePath()
                + File.separator+FILEPATH;
        File file = new File(filePath);
        if(!file.exists()){//判断文件夹是否存在
            file.mkdirs();//不存在 则创建
        }
        return filePath;
    }

    /**
     * 获取路径（没有SD卡则获取手机内存的）
     * @return
     */
    public static String getPath(){
        if(isSDCardEnable()){
            return getSDCardPath();
        }else {
            return getRootDirectoryPath();
        }
    }

    /**
     * 把txt文件写入SD卡
     * @param dirPath 文件路径
     * @param fileName 文件名
     * @param text 内容
     */
    public static void writeTXT2SDCard(String dirPath,String fileName,String text){

        File file = new File(dirPath);
//		if(!file.exists()){//判断文件夹是否存在
//			file.mkdirs();//不存在 则创建
//		}
        OutputStream output = null;
        File f = new File(file, fileName+".txt");
        try {
            output = new FileOutputStream(f);
            output.write(text.getBytes());


        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally{
            try {
                output.close();    //关闭数据流操作
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }

    /**
     * 从SD卡读取txt文件内容
     * @param dirPath 文件路径
     * @param fileName 文件名
     * @return
     */
    public static String readTXT4SDCard(String dirPath,String fileName){

        File file = new File(dirPath+fileName+".txt");
        if(!file.exists()){//判断文件是否存在
            return null;
        }
        System.out.println("文件是否存在");
        StringBuffer sb = new StringBuffer();
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader(file));
            String line="";
            while((line = br.readLine())!=null){
                sb.append(line);
                sb.append("\r\n");
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                br.close();
            } catch (Exception e2) {
                // TODO: handle exception
            }
        }

        return sb.toString();

    }

    /**
     * 获取指定目录的所有文件名
     * @return
     */
    public static List<String> getFileNmaes(){

        List<String> list = new ArrayList<String>();
        String filePath;
        if(isSDCardEnable()){
            filePath = getSDCardPath();
        }else {
            filePath = getRootDirectoryPath();
        }
        File file = new File(filePath);
        if(!file.exists()){
            return null;
        }
        File[] files = file.listFiles();

        for(int i=0;i<files.length;i++){
            String name = files[i].getName().split("\\.")[0];
            list.add(name);
        }

        return list;

    }

    public static boolean deleteFile(String filePath){
        String path = getPath()+filePath+".txt";
        File file = new File(path);
        if(file.exists()){
            if(file.delete()){
                return true;
            }

        }

        return false;
    }


    /**
     * 检查是否重名
     * @param fileName 文件名
     * @return
     */
    public static boolean RepeatName(String fileName){
        List<String> list = new ArrayList<String>();
        list = getFileNmaes();
        for(int i=0;i<list.size();i++){
            if(list.get(i).equals(fileName)){
                return true;
            }
        }

        return false;
    }



    /**
     * 把图片文件写入SD卡
     * @param fileName 文件名带后缀的
     * @param data 文件字节流
     * @return true为保存成功
     */
    public static boolean writePic2SDCard(String fileName,byte[] data){

        String dirPath = getPath();//文件路径

        File file = new File(dirPath);

        OutputStream output = null;
        File f = new File(file, fileName);
        try {
            output = new FileOutputStream(f);
            output.write(data);

            return true;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }
        finally{
            try {
                output.close();    //关闭数据流操作
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }

}
